package com.iot.device.service.impl;

import java.util.Date;
import java.util.List;
import com.iot.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.iot.device.mapper.DeviceSerialNoMapper;
import com.iot.device.domain.DeviceSerialNo;
import com.iot.device.service.IDeviceSerialNoService;

/**
 * 设备序列号生成Service业务层处理
 *
 * @author iot
 * @date 2023-06-12
 */
@Service
public class DeviceSerialNoServiceImpl implements IDeviceSerialNoService
{
    @Autowired
    private DeviceSerialNoMapper deviceSerialNoMapper;

    /**
     * 查询设备序列号生成
     *
     * @param id 设备序列号生成主键
     * @return 设备序列号生成
     */
    @Override
    public DeviceSerialNo selectDeviceSerialNoById(Integer id)
    {
        return deviceSerialNoMapper.selectDeviceSerialNoById(id);
    }

    /**
     * 查询设备序列号生成列表
     *
     * @param deviceSerialNo 设备序列号生成
     * @return 设备序列号生成
     */
    @Override
    public List<DeviceSerialNo> selectDeviceSerialNoList(DeviceSerialNo deviceSerialNo)
    {
        return deviceSerialNoMapper.selectDeviceSerialNoList(deviceSerialNo);
    }

    /**
     * 新增设备序列号生成
     *
     * @param deviceSerialNo 设备序列号生成
     * @return 结果
     */
    @Override
    public int insertDeviceSerialNo(DeviceSerialNo deviceSerialNo)
    {
        deviceSerialNo.setCreateTime(DateUtils.getNowDate());
        return deviceSerialNoMapper.insertDeviceSerialNo(deviceSerialNo);
    }

    /**
     * 修改设备序列号生成
     *
     * @param deviceSerialNo 设备序列号生成
     * @return 结果
     */
    @Override
    public int updateDeviceSerialNo(DeviceSerialNo deviceSerialNo)
    {
        return deviceSerialNoMapper.updateDeviceSerialNo(deviceSerialNo);
    }

    /**
     * 批量删除设备序列号生成
     *
     * @param ids 需要删除的设备序列号生成主键
     * @return 结果
     */
    @Override
    public int deleteDeviceSerialNoByIds(Integer[] ids)
    {
        return deviceSerialNoMapper.deleteDeviceSerialNoByIds(ids);
    }

    /**
     * 删除设备序列号生成信息
     *
     * @param id 设备序列号生成主键
     * @return 结果
     */
    @Override
    public int deleteDeviceSerialNoById(Integer id)
    {
        return deviceSerialNoMapper.deleteDeviceSerialNoById(id);
    }

    @Override
    public synchronized String selectNewDeviceSerialNo(String deviceType) {
        Integer serialNo =  deviceSerialNoMapper.selectNewDeviceSerialNo(deviceType);
        Integer newSerialNo = serialNo == null ? 1 : serialNo + 1;
        String newSerialNoStr = String.valueOf(newSerialNo);
        if(deviceType.equalsIgnoreCase("PD")){
            String yearMonth = DateUtils.getTime("yyyyMM");
            while (newSerialNoStr.length() < 3) {
                newSerialNoStr = "0" + newSerialNoStr;
            }
            newSerialNoStr = yearMonth + newSerialNoStr;
        }else{
            while (newSerialNoStr.length() < 6) {
                newSerialNoStr = "0" + newSerialNoStr;
            }
            newSerialNoStr = deviceType + newSerialNoStr;
        }
        DeviceSerialNo deviceSerialNo = new DeviceSerialNo();
        deviceSerialNo.setDeviceNo(newSerialNoStr);
        deviceSerialNo.setDeviceType(deviceType);
        deviceSerialNo.setSerialNo(newSerialNo);
        deviceSerialNo.setCreateTime(DateUtils.getNowDate());
        deviceSerialNoMapper.insertDeviceSerialNo(deviceSerialNo);
        return deviceSerialNo.getDeviceNo();
    }
}
